package com.base.themvx

import android.content.Context
import java.util.Locale

/**
 ******************(^_^)***********************<br>
 * Author: fee(QQ/WeiXin:1176610771)<br>
 * Date: 2022/8/19<br>
 * Time: 14:15<br>
 * <P>DESC:
 * App所支持的语言模式(本类设计的目的是为了：1、使用内存缓存中的对应语种的语言资源;
 *   2、如果内存缓存中不存在，也从对应语种的string.xml中加载语言资源)
 * </p>
 * ******************(^_^)***********************
 */
abstract class LanguageMode(val locale: Locale) {
    /**
     * 是否已经加载过了语言资源
     */
    @Volatile
    protected var mIsLoadedRes = false

    var isEnableCache = false

    /**
     * 当前语言模式下的 语言映射值
     */
    protected val mLanguageValues by lazy(LazyThreadSafetyMode.NONE) {
        mutableMapOf<Int, CharSequence>()
    }

    /**
     * 加载语言资源
     */
    abstract fun loadLanguageRes()


    /**
     * 获取当前语言下的 CharSequence
     */
    open fun getLanguageValue(theKey: Int): CharSequence {
        val v = mLanguageValues[theKey]
        return v ?: ""
    }

    /**
     * 获取各资源下的语言值,
     * 各子类本应该实现自己对应的语种资源加载
     */
    open fun loadLangValueFromRes(context: Context, theKey: Int): String {
//        val localRes = Resources(context.assets,null,)
        val v =  context.getString(theKey)
        if (isEnableCache){
            mLanguageValues[theKey] = v
        }
        return v
    }

    fun isSameLangMode(otherMode: LanguageMode): Boolean {
        if (otherMode == this) return true
        if (otherMode.getLanguage() == getLanguage() && otherMode.getLanguageCountry() == getLanguageCountry()){
            return true
        }
        return false
    }

    fun isSameAsLocale(locale: Locale): Boolean {
        return locale.language == getLanguage() && locale.country == getLanguageCountry()
    }

    fun getLanguage():String = locale.language

    fun getLanguageCountry(): String = locale.country

    override fun toString(): String {
        return "LanguageMode(locale=$locale)"
    }


}

/**
 * 中文模式(简体中文)
 */
class ChineseMode: LanguageMode(Locale.CHINA) {
    /**
     * 加载语言资源
     */
    override fun loadLanguageRes() {
        if (mIsLoadedRes){
            return
        }
        mIsLoadedRes = true
    }
}

/**
 * 英语模式
 */
class EnglishMode : LanguageMode(Locale.ENGLISH) {
    /**
     * 加载语言资源
     */
    override fun loadLanguageRes() {
        if (mIsLoadedRes){
            return
        }
        //示例
//        mLanguageValues[R.string.app_name] = "LingoPop"
        mIsLoadedRes = true
    }
}

/**
 * 韩语模式
 */
class KoreaMode : LanguageMode(Locale.KOREA) {
    override fun loadLanguageRes() {
        if (mIsLoadedRes){
            return
        }
//        mLanguageValues[R.string.app_name] = "韩语App名称"
        mIsLoadedRes = true
    }
}



